#include <chrono>
#include <iostream>
#include <optional>

// 使用std::optional的版本
std::optional<int> maybeGetValue(bool valid) {
    if (valid) {
        return 42; // 返回有效值
    } else {
        return {}; // 返回无效值
    }
}

// 不使用std::optional，使用特殊值表示无效
int getValue(bool valid) {
    if (valid) {
        return 42; // 返回有效值
    } else {
        return -1; // 使用特殊值表示无效值
    }
}

int main() {
    const long long iterations = 1000000000; // 迭代次数
    bool valid = false;

    // 测试std::optional版本
    auto start = std::chrono::high_resolution_clock::now();
    for (long long i = 0; i < iterations; ++i) {
        auto result = maybeGetValue(valid);
        if (result) {
            // 如果有值，模拟一些操作
            volatile int value = *result;
        }
    }
    auto end = std::chrono::high_resolution_clock::now();
    std::chrono::duration<double> diff = end - start;
    std::cout << "std::optional: " << diff.count() << " s\n";

    // 测试不使用std::optional的版本
    start = std::chrono::high_resolution_clock::now();
    for (long long i = 0; i < iterations; ++i) {
        int result = getValue(valid);
        if (result != -1) {
            // 如果值有效，模拟一些操作
            volatile int value = result;
        }
    }
    end = std::chrono::high_resolution_clock::now();
    diff = end - start;
    std::cout << "Traditional: " << diff.count() << " s\n";

    return 0;
}
